home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2001 May / SGI IRIX Base Documentation 2001 May.iso / usr / share / catman / p_man / cat3dm / audiofile / AFintro.z / AFintro
Encoding:
Text File  |  1998-10-20  |  48.4 KB  |  859 lines

  1.  
  2.  
  3.  
  4. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      afIntro, AFintro - Introduction to the Silicon Graphics Audio File
  10.      Library (AF)
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      ####iiiinnnncccclllluuuuddddeeee <<<<ddddmmmmeeeeddddiiiiaaaa////aaaauuuuddddiiiiooooffffiiiilllleeee....hhhh>>>>
  14.  
  15.      ----llllaaaauuuuddddiiiiooooffffiiiilllleeee
  16.  
  17. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  18.      The Silicon Graphics Audio File Library (AF) provides a uniform
  19.      programming interface to standard digital audio file formats.
  20.  
  21.      Thirteen audio file formats are currently supported by the library:
  22.  
  23.      Extended AIFF-C standard
  24.      AIFF (older version)
  25.      NeXT/Sun SND/AU
  26.      WAVE (RIFF)
  27.      Berkeley/IRCAM/CARL SoundFile
  28.      MPEG1 audio bitstream
  29.      Sound Designer II
  30.      Audio Visual Research
  31.      Amiga IFF/8SVX
  32.      SampleVision
  33.      VOC
  34.      SoundFont2
  35.      Raw (headerless)
  36.  
  37.      Note that the library will continue to support additional file formats
  38.      and data formats, and this has significant ramifications for how it
  39.      should be used.  The Audio File Library is released as a Dynamic Shared
  40.      Object (DSO). This means that as the library starts supporting new file
  41.      formats, programs written at an earlier time can automatically support
  42.      these new formats.  It requires a bit of caution to write a program so
  43.      that it operates correctly as new Audio File Libraries are released.  See
  44.      aaaaffffGGGGeeeettttFFFFiiiilllleeeeFFFFoooorrrrmmmmaaaatttt(3dm) for an example of this.  Make sure to read the
  45.      CAVEATS section of each Audio Library function man page; this is where
  46.      the warning about correct use will appear.
  47.  
  48.      SGI has adopted AIFF-C as its default digital audio file format.  This
  49.      means that the default file configuration for writing (see
  50.      aaaaffffNNNNeeeewwwwFFFFiiiilllleeeeSSSSeeeettttuuuupppp(3dm)) is set to match the default parameters of this
  51.      format.  For backward compatibility, the Audio File Library fully
  52.      supports the older AIFF standard in addition to AIFF-C.  See aaaaiiiiffffffff(4) for
  53.      more detailed information.
  54.  
  55.      Key goals of the Audio File Library are _f_i_l_e _f_o_r_m_a_t _t_r_a_n_s_p_a_r_e_n_c_y and _d_a_t_a
  56.      _f_o_r_m_a_t _t_r_a_n_s_p_a_r_e_n_c_y.  The same calls for opening a file, reading/writing
  57.      basic header information (e.g., sample rate, sample format), and
  58.      reading/writing sample data will work with any supported audio file
  59.      format.
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  71.  
  72.  
  73.  
  74.      The basic library routines for reading audio samples from files and
  75.      writing samples to files, aaaaffffRRRReeeeaaaaddddFFFFrrrraaaammmmeeeessss(3dm) and aaaaffffWWWWrrrriiiitttteeeeFFFFrrrraaaammmmeeeessss(3dm),
  76.      contain built-in codec support for compressed audio data.
  77.  
  78.      The library currently supports read-only and write-only file access.  To
  79.      edit an existing file, you must create a new file and copy audio and
  80.      other data  from the original file.  Example code which shows how to copy
  81.      the logical components of a file is available in the
  82.      /_u_s_r/_s_h_a_r_e/_s_r_c/_d_m_e_d_i_a/_s_o_u_n_d_f_i_l_e directory.
  83.  
  84. LLLLOOOOGGGGIIIICCCCAAAALLLL CCCCOOOOMMMMPPPPOOOONNNNEEEENNNNTTTTSSSS OOOOFFFF AAAANNNN AAAAUUUUDDDDIIIIOOOO FFFFIIIILLLLEEEE
  85.      The Audio File Library API breaks audio files up into these logical
  86.      components: _t_r_a_c_k_s, _i_n_s_t_r_u_m_e_n_t _c_o_n_f_i_g_u_r_a_t_i_o_n_s, and _m_i_s_c_e_l_l_a_n_e_o_u_s _d_a_t_a
  87.      _c_h_u_n_k_s.
  88.  
  89.      _t_r_a_c_k_s
  90.           consist of audio sample data, parameters which characterize the data
  91.           (sample rate, mono/stereo, compression type), and _m_a_r_k_e_r structures
  92.           which store sample frame locations in the track.  _M_a_r_k_e_r_s are used
  93.           for indicating loop point locations within audio tracks, for
  94.           example.
  95.  
  96.      _i_n_s_t_r_u_m_e_n_t _c_o_n_f_i_g_u_r_a_t_i_o_n_s
  97.           are collections of parameters which can be used to configure
  98.           samplers to play back audio _t_r_a_c_k data.  These parameters include
  99.           _l_o_o_p_s, gain levels, and keyboard mapping information.  Though these
  100.           were originally designed only for use with AIFF-C files, they have
  101.           been expanded to provide access to instrument and/or sample
  102.           parameters in all file types which support such things.
  103.  
  104.      _m_i_s_c_e_l_l_a_n_e_o_u_s _d_a_t_a _c_h_u_n_k_s
  105.           include text strings (author, copyright, name, annotation) and
  106.           pieces of auxiliary information (MIDI exclusive data, application-
  107.           specific data).  The kinds of _m_i_s_c_e_l_l_a_n_e_o_u_s _d_a_t_a which may be stored
  108.           in an audio file depend on the file format.  The AIFF-C format, for
  109.           example, has been designed so that it can be extended in the future
  110.           to support different kinds of auxiliary data without breaking
  111.           backward compatibility.
  112.  
  113.      The library API has been designed to accommodate extended file formats
  114.      which contain multiple instrument configurations with arbitrary numbers
  115.      of loops, and additional types of miscellaneous data.  Future releases of
  116.      the AF may support formats with multiple audio tracks.
  117.  
  118.      Audio File Library routines such as aaaaffffRRRReeeeaaaaddddFFFFrrrraaaammmmeeeessss(3dm) manipulate data for
  119.      a specified track in an audio file, which is specified by an integer
  120.      identifier.  The current implementation of the library only supports a
  121.      single audio track per file, regardless of the file format, so for now,
  122.      library routines expect the constant value AAAAFFFF____DDDDEEEEFFFFAAAAUUUULLLLTTTT____TTTTRRRRAAAACCCCKKKK whenever an
  123.      audio track identifier argument is required.
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  137.  
  138.  
  139.  
  140. DDDDAAAATTTTAAAA FFFFOOOORRRRMMMMAAAATTTT TTTTRRRRAAAANNNNSSSSPPPPAAAARRRREEEENNNNCCCCYYYY
  141.      In addition to allowing transparent access to a variety of audio file
  142.      formats, the AF also allows transparent conversion of the audio data
  143.      format between the audio track (file) and the audio buffer (as returned
  144.      by aaaaffffRRRReeeeaaaaddddFFFFrrrraaaammmmeeeessss(3dm)) and for the reverse case (aaaaffffWWWWrrrriiiitttteeeeFFFFrrrraaaammmmeeeessss(3dm)).
  145.  
  146.      _D_a_t_a _F_o_r_m_a_t consists of the following parameters:
  147.  
  148.      Byte Order
  149.      Sample Format
  150.      Sample Width
  151.      Channel Count
  152.      Sampling Rate
  153.      Compression Type
  154.  
  155.      The format of the data that is loaded by the AF into the application's
  156.      audio buffer is known as the _v_i_r_t_u_a_l _f_o_r_m_a_t of the data.  By default,
  157.      this format is identical to the _t_r_a_c_k format with two important
  158.      exceptions:
  159.  
  160.      1) The _b_y_t_e _o_r_d_e_r always defaults to big-endian.
  161.  
  162.      2) The data will always be in _u_n_c_o_m_p_r_e_s_s_e_d format.
  163.  
  164.      Both of these are done in order to assure backwards compatibility with
  165.      the older AF.  It is possible to set the _v_i_r_t_u_a_l _b_y_t_e _o_r_d_e_r to little-
  166.      endian using aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllBBBByyyytttteeeeOOOOrrrrddddeeeerrrr(3dm), but in the current AF the
  167.      _v_i_r_t_u_a_l _c_o_m_p_r_e_s_s_i_o_n will always be 'none'.  The _v_i_r_t_u_a_l _f_o_r_m_a_t of the
  168.      audio data may be changed at any time, and may be done without
  169.      interruption of any ongoing audio i/o.
  170.  
  171.      Here are the current compression and decompression engines supported by
  172.      the Audio File Library.  Note that many others may be supported in the
  173.      future.
  174.  
  175.      The Audio File Library implements software codecs for the following:
  176.  
  177.  
  178.           CCITT G.711 mu-law/A-law (64 Kbs encoding for 8 kHz 16-bit data)
  179.           CCITT G.722 ADPCM (64 Kbs encoding for 16 kHz 16-bit data)
  180.           CCITT G.726 ADPCM (16, 24, 32, or 40 Kbs for 8 kHz 16-bit data)
  181.           CCITT G.728 ADPCM (16 Kbs for 8 kHz 16-bit data)
  182.           GSM 06.10 (13 kBs for 8 kHz 16-bit data)
  183.           IMA ADPCM (for 16-bit data at any sample rate)
  184.  
  185.      The codecs operate in real-time at the recommended sample rates.  Real-
  186.      time operation for stereo data may require setting a high non-degrading
  187.      process priority (see _s_c_h_e_d_c_t_l(_2) or _n_p_r_i(_1)).
  188.  
  189.      The Audio File Library also includes built-in support for MPEG bitstream
  190.      and Aware MultiRate audio compression.  In order to enable the MultiRate
  191.      compression support, you need to purchase a special license from Silicon
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  203.  
  204.  
  205.  
  206.      Graphics, Inc. (see _A_w_a_r_e_I_n_t_r_o(3dm) and _a_f_A_w_a_r_e(3dm) for more
  207.      information).
  208.  
  209.      Apple proprietary compression algorithms (ACE2, ACE8, MAC3, MAC6)
  210.      mentioned in the AIFF-C spec are not supported by the Audio File Library.
  211.  
  212. PPPPCCCCMMMM MMMMAAAAPPPPPPPPIIIINNNNGGGG
  213.      In the Audio File library, the PCM mapping solves the following problem:
  214.      When you want to convert integer data to floating point data or vice
  215.      versa, how do you specify the numeric mapping of one format to another?
  216.      For example, do you map to the integer range or to [-1.0,1.0]?  How do
  217.      you deal with the asymmetry of integers about 0?
  218.  
  219.      An application may want to take (possibly compressed) integer files with
  220.      8,16,24, or 32 bit data in them, and read those files into a buffer in a
  221.      floating point format.  Sometimes the integer data in the file is signed,
  222.      and sometimes it is unsigned.  Similarly, an application may want to
  223.      write floating point buffers which are converted to signed or unsigned
  224.      integers in real time as they are written to the file.
  225.  
  226.      The user may have written his or her code to expect the floating point
  227.      sample values within a certain range, perhaps -1.0 to 1.0, perhaps 0.0 to
  228.      1.0, perhaps -1000.0 to 1000.0.  If an integer->float conversion is
  229.      specified only by a slope, it is impossible to achieve some of those
  230.      mappings (since the intercept is fixed).  Therefor there is the concept
  231.      of an intercept.  That way, for example, integer data which ranged from
  232.      [0,65535] could be mapped to the range [-1.0,1.0].  However, this is
  233.      still not enough information.  The integer range is not symmetric and the
  234.      floating point range effectively is, and so we need to be more specific
  235.      about how the endpoints of the mapping line up.  The addition of a
  236.      minimum and maximum clip value allow the application to determine how it
  237.      wishes to map values outside of a symmetrical range onto another
  238.      symmetrical range.
  239.  
  240.      This technique assumes that there exists one PCM value which corresponds
  241.      to 'zero volts', and that there exists a differential PCM value which,
  242.      when added to or subtracted from the 'zero volt' value, produces a value
  243.      corresponding to 'full-voltage'.  Also the model (optionally) includes
  244.      the notion of a maximum and minimum PCM value; the library will always
  245.      clip any PCM values it inputs or outputs to these values:
  246.  
  247.      ssssllllooooppppeeee       the 'full-voltage' differential PCM value
  248.  
  249.      iiiinnnntttteeeerrrrcccceeeepppptttt   the 'zero-volt' PCM value
  250.  
  251.      mmmmiiiinnnncccclllliiiipppp     the minimum 'legal' PCM value
  252.  
  253.      mmmmaaaaxxxxcccclllliiiipppp     the maximum 'legal' PCM value
  254.  
  255.           The idea of 'voltage' is merely a canonical form and is in no way
  256.           intended to correspond with the hardware.
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  269.  
  270.  
  271.  
  272.      Note that it does not matter what the 'full-voltage' level is
  273.      numerically.  The user simply specifies the parameters of their data, and
  274.      the library uses the PCM mapping to map the user's values to a desired
  275.      internal mapping, or perhaps to another user PCM mapping.
  276.  
  277.      If maxclip <= minclip, this implies no clipping is to be done.  It means
  278.      all PCM values are legal, even if they are outside the range of 'full-
  279.      voltage'.
  280.  
  281.      In the Audio File Library, you specify a PCM mapping for the virtual
  282.      format and optionally also for the track format.  This pseudo-code shows
  283.      exactly how the AF maps each sample value "in_pcm" to a sample value
  284.      "out_pcm."  For an AFfilehandle opened for input, "in" is the track and
  285.      "out" is your buffer.  For an AFfilehandle opened for output, "in" is
  286.      your buffer and "out" is the track:
  287.  
  288.           /* transform in_pcm to volts */
  289.  
  290.           if (in_maxclip > in_minclip)
  291.           {
  292.               if (in_pcm < in_minclip) in_pcm = in_minclip;
  293.               if (in_pcm > in_maxclip) in_pcm = in_maxclip;
  294.           }
  295.           volts = (in_pcm - in_intercept) / in_slope;
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.           /* transform volts to out_pcm */
  305.  
  306.           out_pcm = out_intercept + out_slope * volts;
  307.           if (out_maxclip > out_minclip)
  308.           {
  309.               if (out_pcm < out_minclip) out_pcm = out_minclip;
  310.               if (out_pcm > out_maxclip) out_pcm = out_maxclip;
  311.           }
  312.  
  313. AAAAUUUUDDDDIIIIOOOO FFFFIIIILLLLEEEE LLLLIIIIBBBBRRRRAAAARRRRYYYY PPPPRRRROOOOGGGGRRRRAAAAMMMMMMMMIIIINNNNGGGG IIIINNNNTTTTEEEERRRRFFFFAAAACCCCEEEE
  314.      The basic data types for the Audio File Library are the AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp and
  315.      AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee structures.
  316.  
  317.      AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp is an opaque structure which is used to configure a new audio
  318.      file before it is created by aaaaffffOOOOppppeeeennnnFFFFiiiilllleeee(3dm).  Parameters stored in an
  319.      AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp include the file format, sample format and sample rate, and
  320.      types and sizes of miscellaneous data chunks to be stored in the file.
  321.      aaaaffffOOOOppppeeeennnnFFFFiiiilllleeee(3dm) allocates file header space according to the parameters
  322.      stored in the AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp(3dm) argument.
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  335.  
  336.  
  337.  
  338.      An AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee is an opaque structure which is used to read audio data
  339.      and auxiliary information from an existing file, or write audio data and
  340.      auxiliary information to a new file.  The AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee structure
  341.      maintains state information such as the current location of the logical
  342.      audio sample read/write pointer and the logical locations of the data
  343.      read/write pointers for the various miscellaneous data chunks.
  344.  
  345.      Following is a list of the functions included in the Audio File Library.
  346.  
  347.      Functions for performing basic operations on an AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee structure,
  348.      and for allocating and freeing AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp and AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee structures:
  349.  
  350.      aaaaffffCCCClllloooosssseeeeFFFFiiiilllleeee(3dm)               close and deallocate an AFfilehandle
  351.  
  352.      aaaaffffFFFFrrrreeeeeeeeFFFFiiiilllleeeeSSSSeeeettttuuuupppp(3dm)           deallocate an AFfilesetup struct
  353.  
  354.      aaaaffffIIIIddddeeeennnnttttiiiiffffyyyyFFFFDDDD(3dm)              determine the audio file format for a Unix
  355.                                     file descriptor
  356.  
  357.      aaaaffffIIIIddddeeeennnnttttiiiiffffyyyyNNNNaaaammmmeeeeddddFFFFDDDD(3dm)         determine the audio file format for a Unix
  358.                                     file descriptor and supplied filename
  359.  
  360.      aaaaffffNNNNeeeewwwwFFFFiiiilllleeeeSSSSeeeettttuuuupppp(3dm)            create an AFfilesetup struct
  361.  
  362.      aaaaffffOOOOppppeeeennnnFFFFDDDD(3dm)                  create an AFfilehandle for a Unix file
  363.                                     descriptor
  364.  
  365.      aaaaffffOOOOppppeeeennnnFFFFiiiilllleeee(3dm)                create an AFfilehandle for a named file
  366.  
  367.      aaaaffffRRRReeeeaaaaddddMMMMiiiisssscccc(3dm)                read buffer of miscellaneous data
  368.  
  369.      aaaaffffRRRReeeeaaaaddddFFFFrrrraaaammmmeeeessss(3dm)              read a buffer of sample frames from an
  370.                                     audio track
  371.  
  372.      aaaaffffSSSSeeeeeeeekkkkMMMMiiiisssscccc(3dm)                seek to given location in miscellaneous
  373.                                     data
  374.  
  375.      aaaaffffSSSSeeeettttCCCCoooonnnnvvvveeeerrrrssssiiiioooonnnnPPPPaaaarrrraaaammmmssss(3dm)     set, via ddddmmmmPPPPaaaarrrraaaammmmssss(3dm), the parameters
  376.                                     used for format and rate conversion in an
  377.                                     audio track.  This includes the rate
  378.                                     conversion algorithm, if any, and the
  379.                                     dithering algorithm.
  380.  
  381.      aaaaffffSSSSeeeettttEEEErrrrrrrroooorrrrHHHHaaaannnnddddlllleeeerrrr(3dm)         supply an error reporting routine for the
  382.                                     library
  383.  
  384.      aaaaffffSSSSeeeettttTTTTrrrraaaacccckkkkPPPPCCCCMMMMMMMMaaaappppppppiiiinnnngggg(3dm)      set the PCM mapping (slope, intercept, min
  385.                                     clip, max clip) for the audio data in a
  386.                                     track, overriding the track's default
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  401.  
  402.  
  403.  
  404.      aaaaffffSSSSyyyynnnnccccFFFFiiiilllleeee(3dm)                update file header without closing file
  405.  
  406.      aaaaffffWWWWrrrriiiitttteeeeFFFFrrrraaaammmmeeeessss(3dm)             write a buffer of sample frames to an
  407.                                     audio track
  408.  
  409.      aaaaffffWWWWrrrriiiitttteeeeMMMMiiiisssscccc(3dm)               write buffer of miscellaneous data
  410.  
  411.      Functions for obtaining information from an AAAAFFFFffffiiiilllleeeehhhhaaaannnnddddlllleeee structure:
  412.  
  413.      aaaaffffGGGGeeeettttAAAAEEEESSSSCCCChhhhaaaannnnnnnneeeellllDDDDaaaattttaaaa(3dm)       read AES channel status for an audio track
  414.  
  415.      aaaaffffGGGGeeeettttBBBByyyytttteeeeOOOOrrrrddddeeeerrrr(3dm)            get the byte order (big- or little-endian)
  416.                                     for samples in a track
  417.  
  418.      aaaaffffGGGGeeeettttCCCChhhhaaaannnnnnnneeeellllssss(3dm)             get the number of interleaved channels in
  419.                                     a track
  420.  
  421.      aaaaffffGGGGeeeettttCCCCoooommmmpppprrrreeeessssssssiiiioooonnnn(3dm)          get compression type for a track
  422.  
  423.      aaaaffffGGGGeeeettttCCCCoooommmmpppprrrreeeessssssssiiiioooonnnnPPPPaaaarrrraaaammmmssss(3dm)    get compression type and algorithm-
  424.                                     specific compression parameters for a
  425.                                     track
  426.  
  427.      aaaaffffGGGGeeeettttDDDDaaaattttaaaaOOOOffffffffsssseeeetttt(3dm)           get the offset in bytes from the beginning
  428.                                     of the file to the beginning of the audio
  429.                                     data
  430.  
  431.      aaaaffffGGGGeeeettttFFFFDDDD(3dm)                   get Unix file descriptor from an
  432.                                     AFfilehandle
  433.  
  434.      aaaaffffGGGGeeeettttFFFFiiiilllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)           get the file format for an AFfilehandle
  435.  
  436.      aaaaffffGGGGeeeettttFFFFoooorrrrmmmmaaaattttPPPPaaaarrrraaaammmmssss(3dm)         get (via ddddmmmmPPPPaaaarrrraaaammmmssss(3dm)) the sample format,
  437.                                     channels, byte order, etc. for a track
  438.  
  439.      aaaaffffGGGGeeeettttFFFFrrrraaaammmmeeeeCCCCoooouuuunnnntttt(3dm)           get the total number of frames in a track.
  440.  
  441.      aaaaffffGGGGeeeettttIIIInnnnssssttttIIIIDDDDssss(3dm)              get list of instrument map id's
  442.  
  443.      aaaaffffGGGGeeeettttIIIInnnnssssttttPPPPaaaarrrraaaammmmLLLLoooonnnngggg(3dm)        get value of an instrument map parameter
  444.  
  445.      aaaaffffGGGGeeeettttLLLLooooooooppppCCCCoooouuuunnnntttt(3dm)            get the loop count (number of repetitions)
  446.                                     for a given loop
  447.  
  448.      aaaaffffGGGGeeeettttLLLLooooooooppppEEEEnnnndddd(3dm)              get the marker id for a loop's end frame
  449.  
  450.      aaaaffffGGGGeeeettttLLLLooooooooppppEEEEnnnnddddFFFFrrrraaaammmmeeee(3dm)         get a loop's end frame directly
  451.  
  452.      aaaaffffGGGGeeeettttLLLLooooooooppppIIIIDDDDssss(3dm)              get a list of loop id's for an instrument
  453.                                     config
  454.  
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  467.  
  468.  
  469.  
  470.      aaaaffffGGGGeeeettttLLLLooooooooppppMMMMooooddddeeee(3dm)             get the loop mode for a given loop
  471.  
  472.      aaaaffffGGGGeeeettttLLLLooooooooppppSSSSttttaaaarrrrtttt(3dm)            get the marker id for a loop's start frame
  473.  
  474.      aaaaffffGGGGeeeettttLLLLooooooooppppSSSSttttaaaarrrrttttFFFFrrrraaaammmmeeee(3dm)       get a loop's start frame directly
  475.  
  476.      aaaaffffGGGGeeeettttLLLLooooooooppppTTTTrrrraaaacccckkkk(3dm)            get the track id for a given loop
  477.  
  478.      aaaaffffGGGGeeeettttMMMMaaaarrrrkkkkCCCCoooommmmmmmmeeeennnntttt(3dm)          get text comment for a marker
  479.  
  480.      aaaaffffGGGGeeeettttMMMMaaaarrrrkkkkIIIIDDDDssss(3dm)              get list of markers for an audio track
  481.  
  482.      aaaaffffGGGGeeeettttMMMMaaaarrrrkkkkNNNNaaaammmmeeee(3dm)             get name of a marker
  483.  
  484.      aaaaffffGGGGeeeettttMMMMaaaarrrrkkkkPPPPoooossssiiiittttiiiioooonnnn(3dm)         get track location for a given marker
  485.  
  486.      aaaaffffGGGGeeeettttMMMMiiiissssccccIIIIDDDDssss(3dm)              get list of miscellaneous data chunks
  487.  
  488.      aaaaffffGGGGeeeettttMMMMiiiissssccccSSSSiiiizzzzeeee(3dm)             get size of a miscellaneous data chunk
  489.  
  490.      aaaaffffGGGGeeeettttMMMMiiiissssccccTTTTyyyyppppeeee(3dm)             get type of data in miscellaneous data
  491.                                     chunk
  492.  
  493.      aaaaffffGGGGeeeettttPPPPCCCCMMMMMMMMaaaappppppppiiiinnnngggg(3dm)           get the PCM mapping (slope, intercept, min
  494.                                     clip, max clip) for the audio data in a
  495.                                     track
  496.  
  497.      aaaaffffGGGGeeeettttRRRRaaaatttteeee(3dm)                 get the sample rate for an audio track
  498.  
  499.      aaaaffffGGGGeeeettttSSSSaaaammmmpppplllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)         get the sample format and resolution
  500.                                     (sample width) for a track
  501.  
  502.      aaaaffffGGGGeeeettttTTTTrrrraaaacccckkkkBBBByyyytttteeeessss(3dm)           get the total raw byte count for the audio
  503.                                     data in a track
  504.  
  505.      aaaaffffGGGGeeeettttTTTTrrrraaaacccckkkkIIIIDDDDssss(3dm)             get list of track id's for an AFfilehandle
  506.  
  507.      Functions for setting and getting the virtual (audio data buffer) format.
  508.  
  509.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllBBBByyyytttteeeeOOOOrrrrddddeeeerrrr(3dm)      get the byte order (big- or little-
  510.                                      endian) of the audio data buffer
  511.  
  512.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllBBBByyyytttteeeeOOOOrrrrddddeeeerrrr(3dm)      set the byte order (big- or little-
  513.                                      endian) of the audio data buffer
  514.  
  515.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllCCCChhhhaaaannnnnnnneeeellllssss(3dm)       get the number of interleaved channels in
  516.                                      the audio data buffer
  517.  
  518.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllCCCChhhhaaaannnnnnnneeeellllssss(3dm)       set the number of interleaved channels in
  519.                                      the audio data buffer
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  533.  
  534.  
  535.  
  536.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllFFFFoooorrrrmmmmaaaattttPPPPaaaarrrraaaammmmssss(3dm)   set (via ddddmmmmPPPPaaaarrrraaaammmmssss(3dm)) the virtual
  537.                                      sample format, channels, byte order, etc.
  538.                                      for a track
  539.  
  540.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllFFFFrrrraaaammmmeeeeSSSSiiiizzzzeeee(3dm)      get the frame size in bytes for the audio
  541.                                      data buffer
  542.  
  543.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllPPPPCCCCMMMMMMMMaaaappppppppiiiinnnngggg(3dm)     get the PCM mapping (slope, intercept,
  544.                                      min clip, max clip) for the audio data
  545.                                      buffer
  546.  
  547.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllPPPPCCCCMMMMMMMMaaaappppppppiiiinnnngggg(3dm)     set the PCM mapping (slope, intercept,
  548.                                      min clip, max clip) for the audio data
  549.                                      buffer
  550.  
  551.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllRRRRaaaatttteeee(3dm)           get the sampling rate of the audio data
  552.                                      buffer.
  553.  
  554.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllRRRRaaaatttteeee(3dm)           set the sampling rate for the audio data
  555.                                      buffer.  Data will be automatically
  556.                                      rate-converted to match the virtual rate
  557.                                      setting.
  558.  
  559.      aaaaffffGGGGeeeettttVVVViiiirrrrttttuuuuaaaallllSSSSaaaammmmpppplllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)   get the sample format and resolution
  560.                                      (sample width) of the audio data buffer
  561.  
  562.      aaaaffffSSSSeeeettttVVVViiiirrrrttttuuuuaaaallllSSSSaaaammmmpppplllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)   set the sample format and resolution of
  563.                                      the audio data buffer
  564.  
  565.      Functions for setting initialization parameters in an AAAAFFFFffffiiiilllleeeesssseeeettttuuuupppp
  566.      structure (which is used to configure an audio file when the file is
  567.      opened):
  568.  
  569.      aaaaffffIIIInnnniiiittttAAAAEEEESSSSCCCChhhhaaaannnnnnnneeeellllDDDDaaaattttaaaa(3dm)      reserve space for AES channel status in a
  570.                                     new file
  571.  
  572.      aaaaffffIIIInnnniiiittttBBBByyyytttteeeeOOOOrrrrddddeeeerrrr(3dm)           configure the byte order for the audio
  573.                                     data in a track
  574.  
  575.      aaaaffffIIIInnnniiiittttCCCChhhhaaaannnnnnnneeeellllssss(3dm)            configure number of channels for a new
  576.                                     track
  577.  
  578.      aaaaffffIIIInnnniiiittttCCCCoooommmmpppprrrreeeessssssssiiiioooonnnn(3dm)         configure compression type for a track
  579.  
  580.      aaaaffffIIIInnnniiiittttCCCCoooommmmpppprrrreeeessssssssiiiioooonnnnPPPPaaaarrrraaaammmmssss(3dm)   configure compression type and algorithm-
  581.                                     specific parameters
  582.  
  583.      aaaaffffIIIInnnniiiittttFFFFiiiilllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)          configure the format for a new file
  584.  
  585.      aaaaffffIIIInnnniiiittttFFFFoooorrrrmmmmaaaattttPPPPaaaarrrraaaammmmssss(3dm)        configure (via ddddmmmmPPPPaaaarrrraaaammmmssss(3dm)) the sample
  586.                                     format, channels, byte order, etc. for a
  587.                                     new track
  588.  
  589.  
  590.  
  591.                                                                         PPPPaaaaggggeeee 9999
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  599.  
  600.  
  601.  
  602.      aaaaffffIIIInnnniiiittttDDDDaaaattttaaaaOOOOffffffffsssseeeetttt(3dm)          configure the offset in bytes from the
  603.                                     beginning of the file for the audio data
  604.  
  605.      aaaaffffIIIInnnniiiittttFFFFrrrraaaammmmeeeeCCCCoooouuuunnnntttt(3dm)          configure the expected frame count for the
  606.                                     audio data
  607.  
  608.      aaaaffffIIIInnnniiiittttIIIInnnnssssttttIIIIDDDDssss(3dm)             configure instrument config id's for a new
  609.                                     file
  610.  
  611.      aaaaffffIIIInnnniiiittttLLLLooooooooppppIIIIDDDDssss(3dm)             configure loop id's for an instrument map
  612.  
  613.      aaaaffffIIIInnnniiiittttMMMMaaaarrrrkkkkCCCCoooommmmmmmmeeeennnntttt(3dm)         configure text comment of a marker
  614.  
  615.      aaaaffffIIIInnnniiiittttMMMMaaaarrrrkkkkIIIIDDDDssss(3dm)             configure marker id's for an audio track
  616.  
  617.      aaaaffffIIIInnnniiiittttMMMMaaaarrrrkkkkNNNNaaaammmmeeee(3dm)            configure name of a marker
  618.  
  619.      aaaaffffIIIInnnniiiittttMMMMiiiissssccccIIIIDDDDssss(3dm)             configure miscellaneous data chunk id's
  620.  
  621.      aaaaffffIIIInnnniiiittttMMMMiiiissssccccSSSSiiiizzzzeeee(3dm)            configure size of a miscellaneous chunk
  622.  
  623.      aaaaffffIIIInnnniiiittttMMMMiiiissssccccTTTTyyyyppppeeee(3dm)            configure type of data for a miscellaneous
  624.                                     chunk
  625.  
  626.      aaaaffffIIIInnnniiiittttPPPPCCCCMMMMMMMMaaaappppppppiiiinnnngggg(3dm)          configure the PCM mapping (slope,
  627.                                     intercept, min clip, max clip) for the
  628.                                     audio data in a track
  629.  
  630.      aaaaffffIIIInnnniiiittttRRRRaaaatttteeee(3dm)                configure sample rate for a new track
  631.  
  632.      aaaaffffIIIInnnniiiittttSSSSaaaammmmpppplllleeeeFFFFoooorrrrmmmmaaaatttt(3dm)        configure sample format for a new track
  633.  
  634.      aaaaffffIIIInnnniiiittttTTTTrrrraaaacccckkkkIIIIDDDDssss(3dm)            configure track id's for a new audio file
  635.  
  636.      Functions for setting values in an audio file after it has been opened.
  637.  
  638.      aaaaffffSSSSeeeettttAAAAEEEESSSSCCCChhhhaaaannnnnnnneeeellllDDDDaaaattttaaaa(3dm)       write AES channel status to an audio track
  639.  
  640.      aaaaffffSSSSeeeettttLLLLooooooooppppCCCCoooouuuunnnntttt(3dm)            set loop count (number of repetitions) for
  641.                                     a specified loop
  642.  
  643.      aaaaffffSSSSeeeettttLLLLooooooooppppEEEEnnnndddd(3dm)              set marker for a loop's end frame
  644.  
  645.      aaaaffffSSSSeeeettttLLLLooooooooppppEEEEnnnnddddFFFFrrrraaaammmmeeee(3dm)         set a loop's end frame directly
  646.  
  647.      aaaaffffSSSSeeeettttLLLLooooooooppppMMMMooooddddeeee(3dm)             set loop mode for a specified loop
  648.  
  649.      aaaaffffSSSSeeeettttLLLLooooooooppppSSSSttttaaaarrrrtttt(3dm)            set marker for a loop's start frame
  650.  
  651.      aaaaffffSSSSeeeettttLLLLooooooooppppSSSSttttaaaarrrrttttFFFFrrrraaaammmmeeee(3dm)       set a loop's start frame directly
  652.  
  653.  
  654.  
  655.  
  656.  
  657.                                                                        PPPPaaaaggggeeee 11110000
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  665.  
  666.  
  667.  
  668.      aaaaffffSSSSeeeettttLLLLooooooooppppTTTTrrrraaaacccckkkk(3dm)            set the track id for a given loop
  669.  
  670.      aaaaffffSSSSeeeettttMMMMaaaarrrrkkkkPPPPoooossssiiiittttiiiioooonnnn(3dm)         set the track location for a given marker
  671.  
  672.      Functions for querying static parameters associated with the Audio File
  673.      Library
  674.  
  675.      aaaaffffQQQQuuuueeeerrrryyyy(3dm)          return the value of a parameter as an AAAAUUUUppppvvvvlllliiiisssstttt
  676.                            struct
  677.  
  678.      aaaaffffQQQQuuuueeeerrrryyyyLLLLoooonnnngggg(3dm)      return the value of a parameter as a long integer
  679.  
  680.      aaaaffffQQQQuuuueeeerrrryyyyDDDDoooouuuubbbblllleeee(3dm)    return the value of a parameter as a double
  681.                            precision float point
  682.  
  683.      aaaaffffQQQQuuuueeeerrrryyyyPPPPooooiiiinnnntttteeeerrrr(3dm)   return the value of a parameter as a generic
  684.                            pointer (void *)
  685.  
  686. CCCCAAAAVVVVEEEEAAAATTTTSSSS FFFFOOOORRRR UUUUSSSSIIIINNNNGGGG TTTTHHHHEEEE HHHHAAAANNNNDDDDLLLLEEEE''''SSSS FFFFIIIILLLLEEEE DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTOOOORRRR
  687.      The file descriptor returned by aaaaffffGGGGeeeettttFFFFDDDD(3dm) is not intended to allow
  688.      users to read, write, and seek in the file without the knowledge of the
  689.      Audio File Library.  Doing so will cause the library to give
  690.      unpredictable results unless the user saves and restores the file
  691.      position whenever they modify it.  This can be done using
  692.      aaaaffffSSSSaaaavvvveeeeFFFFiiiilllleeeePPPPoooossssiiiittttiiiioooonnnn(3dm) and aaaaffffRRRReeeessssttttoooorrrreeeeFFFFiiiilllleeeePPPPoooossssiiiittttiiiioooonnnn(3dm).  The same
  693.      precautions must be also used with the file descriptor given to
  694.      afOpenFD().  Developers can get the offset of the audio data in an audio
  695.      file via the aaaaffffGGGGeeeettttDDDDaaaattttaaaaOOOOffffffffsssseeeetttt(3dm) function.
  696.  
  697. CCCCAAAAVVVVEEEEAAAATTTTSSSS AAAABBBBOOOOUUUUTTTT TTTTHHHHEEEE MMMMAAAANNNNNNNNEEEERRRR IIIINNNN WWWWHHHHIIIICCCCHHHH TTTTHHHHEEEE AAAAFFFF AAAACCCCCCCCEEEESSSSSSSSEEEESSSS FFFFIIIILLLLEEEESSSS
  698.      SGI gives no guarantees about the number or nature of UNIX system calls
  699.      that will result from a given AF call.  In particular, afReadFrames() and
  700.      afWriteFrames() could actually read or write any amount of data from the
  701.      file, or could read or write more than once in varying chunk sizes.
  702.      Also, afOpenFile(), afSeekFrame(), afSyncFile(), afCloseFile(), and other
  703.      AF functions could result in any amount of data being read from or
  704.      written to the file.  The AF will not write to a file opened for read
  705.      access or read from a file opened for write access.
  706.  
  707.      Users who are attempting to optimize the I/O in their program by managing
  708.      I/O system call behavior should be aware that at this time we offer no
  709.      guarantees about when the AF will perform system calls.
  710.  
  711. CCCCAAAAVVVVEEEEAAAATTTTSSSS FFFFOOOORRRR MMMMUUUULLLLTTTTIIIITTTTHHHHRRRREEEEAAAADDDDEEEEDDDD PPPPRRRROOOOGGGGRRRRAAAAMMMMMMMMIIIINNNNGGGG
  712.      The Audio File Library is NOT a multi-thread and/or multi-processor safe
  713.      library, in the following sense:
  714.  
  715.      Users can make multiple, simultaneous, uncoordinated AF calls on
  716.      different AFfilehandles from different threads and the library will
  717.      operate fine.  Each AFfilehandle completely encapsulates the state needed
  718.      to do operations on that AFfilehandle (except for error handling, which
  719.      is explained next).
  720.  
  721.  
  722.  
  723.                                                                        PPPPaaaaggggeeee 11111111
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  731.  
  732.  
  733.  
  734.      Users cannot make multiple, simultaneous, uncoordinated AF calls from
  735.      different threads to set or access the library's global state--namely,
  736.      the error handler function.  If two threads simultaneously try to set the
  737.      global error handler (even the same error handler), the behavior is
  738.      undefined.  See below for an alternative.
  739.  
  740.      Furthermore, if the user writes an error handler, then makes multiple,
  741.      simultaneous, uncoordinated AF calls on different filehandles from
  742.      different threads, and both AF calls issue an error simultaneously, then
  743.      two instances of the user's error handler will be called in a
  744.      simultaneous, uncoordinated manner in two threads.  If this situation is
  745.      possible in a user's program, the user should use semaphores in their
  746.      error handler in order to make sure their handler doesn't try and report
  747.      or deal with two errors at the same time.  Note that any AF function can
  748.      cause an AF error to occur.  Do not assume a function will not produce
  749.      and error just because it is simple.
  750.  
  751.      A new form of MT-safe error handling mechanism is now available; if an
  752.      application wishes to use it, it should call aaaaffffSSSSeeeettttEEEErrrrrrrroooorrrrHHHHaaaannnnddddlllleeeerrrr(3dm) with
  753.      a NULL value to disable the old error handler system, and call
  754.      ddddmmmmGGGGeeeettttEEEErrrrrrrroooorrrr(3dm) when a function returns an error value.  The application
  755.      must also add ----llllddddmmmmeeeeddddiiiiaaaa to the link arguments if it calls this routine.
  756.  
  757.      Now the most important caveat:  Users cannot make multiple, simultaneous,
  758.      uncoordinated AF calls on the same AFfilehandle from different threads,
  759.      even if the order of execution of those calls does not matter to the
  760.      user.  Doing so will very likely cause a core dump, or at least
  761.      corruption of the AFfilehandle.  This behavior will never be changed, as
  762.      we refuse to make our developers pay the price of semaphore locking code
  763.      at the beginning and end of every afReadFrames and afWriteFrames call.
  764.      Most users do not need, and in fact really do not want, semaphore
  765.      protection that is built-in to the AF calls themselves.
  766.  
  767. FFFFIIIILLLLEEEESSSS
  768.      Audio File Library header file:
  769.           /usr/include/dmedia/audiofile.h
  770.  
  771.      Audio File Library code examples:
  772.           /usr/share/src/dmedia/soundcommands/*
  773.           /usr/share/src/dmedia/soundfile/*
  774.  
  775.      The programs ppppllllaaaayyyyaaaaiiiiffffffff((((1111)))) and ppppllllaaaayyyyaaaaiiiiffffcccc((((1111)))) are now installed as links to
  776.      the program ssssffffppppllllaaaayyyy((((1111)))); rrrreeeeccccoooorrrrddddaaaaiiiiffffffff((((1111)))) and rrrreeeeccccoooorrrrddddaaaaiiiiffffcccc((((1111)))) are now installed
  777.      as links to the program ssssffffrrrreeeeccccoooorrrrdddd((((1111)))).  These programs are based on calls
  778.      to the and Audio File Library and Audio Library.
  779.  
  780.      The file aaaaiiiiffffccccccccoooonnnnvvvveeeerrrrtttt....cccc is actually the source for several programs which
  781.      are installed in /usr/sbin: aaaaiiiiffffcccc2222aaaaiiiiffffffff((((1111)))), aaaaiiiiffffffff2222aaaaiiiiffffcccc((((1111)))), aaaaiiiiffffccccccccoooommmmpppprrrreeeessssssss((((1111)))),
  782.      and aaaaiiiiffffccccddddeeeeccccoooommmmpppprrrreeeessssssss((((1111)))).
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.                                                                        PPPPaaaaggggeeee 11112222
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796. aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))                                                      aaaaffffIIIInnnnttttrrrroooo((((3333ddddmmmm))))
  797.  
  798.  
  799.  
  800. BBBBUUUUGGGGSSSS
  801.      The AIFF-C "comments chunk" described in the format spec is not yet
  802.      supported by the library.  AIFF-C files which contain comment-marker data
  803.      will parse, but there is not yet a way to access comment-marker
  804.      information through the Audio File API.
  805.  
  806. DDDDOOOOCCCCUUUUMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN
  807.      Digital Audio/MIDI Programming Guide
  808.  
  809.      _A_u_d_i_o _I_n_t_e_r_c_h_a_n_g_e _F_i_l_e _F_o_r_m_a_t _A_I_F_F-_C _S_p_e_c_i_f_i_c_a_t_i_o_n, Apple Computer Inc.
  810.  
  811.      _A_d_d_e_n_d_u_m _t_o _t_h_e _A_u_d_i_o _I_n_t_e_r_c_h_a_n_g_e _F_i_l_e _F_o_r_m_a_t _A_I_F_F-_C _S_p_e_c_i_f_i_c_a_t_i_o_n,
  812.      Silicon Graphics Inc.
  813.  
  814.      CCITT _R_e_c_o_m_m_e_n_d_a_t_i_o_n _G._7_1_1
  815.  
  816.      CCITT _R_e_c_o_m_m_e_n_d_a_t_i_o_n _G._7_2_2
  817.  
  818.      aware(5), Introduction to Aware audio compression, Aware Inc.
  819.  
  820.      ISO/IEC MPEG Specification
  821.  
  822.      afAware(3dm), Audio File Library interface to Aware audio compression
  823.  
  824. RRRREEEELLLLAAAATTTTEEEEDDDD LLLLIIIIBBBBRRRRAAAARRRRIIIIEEEESSSS
  825.      ALintro(3dm), Introduction to the SGI Audio Library
  826.  
  827.      CDaudio(3), Introduction to the SGI Audio Compact Disc library
  828.  
  829.      DATaudio(3), Introduction to the SGI Digital Audio Tape Library
  830.  
  831.      dmIntro(3dm), Introduction to the IRIS Digital Media Libraries
  832.  
  833.      /usr/include/dmedia/midi.h, header file for the SGI MIDI Library
  834.  
  835. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  836.      IRIX Real-time Support:
  837.      npri(1), select(2), sproc(2), setitimer(2), schedctl(2)
  838.  
  839.      Audio File Library demo programs:
  840.      recordaifc(1), playaifc(1), aifcinfo(1), dmGetError(3dm), aiff2aifc(1),
  841.      aifc2aiff(1), aifccompress(1), aifcdecompress(1)
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.                                                                        PPPPaaaaggggeeee 11113333
  856.  
  857.  
  858.  
  859.